typedef struct TreeNode BTNode;
typedef struct
{
    BTNode *p;//存放当前指针节点
    int parent;//存放父节点在队列中的位置
}NodeType;//队列中的元素类型


bool hasPathSum(struct TreeNode* root, int targetSum) {
    if(root==NULL)  return false;
    int k;
    BTNode *temp;
    NodeType e;
    NodeType Queue[5000];//定义队列
    int front=-1,tail=-1;
    e.p=root;e.parent=-1;
    Queue[++tail]=e;//根节点进队
    while(front!=tail)
    {
        e=Queue[++front];
        temp=e.p;
        if(temp->left==NULL&&temp->right==NULL) //叶子节点
        {
            k=front;
            int sum=0;
            while(Queue[k].parent!=-1)
            {
                sum+=Queue[k].p->val;
                k=Queue[k].parent;
            }
            sum+=Queue[k].p->val;
            if(sum==targetSum)  return true;
        }
        if(temp->left!=NULL)
        {
            e.p=temp->left;
            e.parent=front;
            Queue[++tail]=e;
        }
        if(temp->right!=NULL)
        {
            e.p=temp->right;
            e.parent=front;
            Queue[++tail]=e;
        }
    }
    return false;
}